/*
 * CEtiquetarElemento.cpp - Grupo 5 - Prog. Avanzada 2011
 *
 *  Javier Dominguez - 4.901.161-6
 *  Marcelo Parada - 1.977.094-9
 *  Rodrigo Ruiz - 4.481.611-2
 *  Maximiliano Silvera - 4.106.938-6
 */

#include "CEtiquetarElemento.h"

CEtiquetarElemento::CEtiquetarElemento()
{
}

EtiquetaDT* CEtiquetarElemento::obtenerEtiqueta(string nombre)
{
	Etiqueta *etiqueta = HEtiqueta::getInstance()->obtenerEtiqueta(nombre);

	return new EtiquetaDT(etiqueta->getNombre());
}

ElementoDT *CEtiquetarElemento::obtenerAlbum(string nombre)
{
	Album *album = HElemento::getInstance()->obtenerAlbum(nombre);

	return new AlbumDT(album->getNombre(), album->getAnioEdicion());
}

ElementoDT *CEtiquetarElemento::obtenerArtista(string nombre)
{
	Artista *artista = HElemento::getInstance()->obtenerArtista(nombre);

	ArtistaDT *artistaDT = NULL;

	if(artista->tipoArtista() == Solista::TIPO_ARTISTA)
	{
		artistaDT = new SolistaDT(artista->getNombre());
	}
	else if(artista->tipoArtista() == Banda::TIPO_ARTISTA)
	{
		Banda *banda = dynamic_cast<Banda*>(artista);

		artistaDT = new BandaDT(banda->getNombre(), banda->getIntegrantes());
	}

	return artistaDT;
}

void CEtiquetarElemento::crearEtiqueta(EtiquetaDT* etiquetaDT)
{
	HEtiqueta::getInstance()->crearEtiqueta(etiquetaDT);
}

ColConcrete<EtiquetaDT*> *CEtiquetarElemento::listarEtiquetasElementoYDisponibles(string nombreElemento)
{
	return HEtiqueta::getInstance()->obtenerEtiquetas();
}

ColConcrete<AlbumDT*> *CEtiquetarElemento::obtenerListadoAlbumes()
{
	return HElemento::getInstance()->obtenerListadoAlbumes();
}

ColConcrete<ArtistaDT*> *CEtiquetarElemento::obtenerListadoArtistas()
{
	return HElemento::getInstance()->obtenerListadoArtistas();
}

void CEtiquetarElemento::asociarElementoEtiqueta(ElementoDT* elementoDT, EtiquetaDT* etiquetaDT)
{
	HEtiqueta::getInstance()->asociarElementoEtiqueta(elementoDT, etiquetaDT);
}

CEtiquetarElemento::~CEtiquetarElemento()
{
}
